extendsの挙動を確認してみた #looker
Looker勉強中のikumiです。今回は、LookerのExtends機能を試してみたので、その内容を記載してきます。
Extendsとは
Extendsとは、ViewやExploreなどに記載できるパラメーターで、ExtendsすることでLookMLコードを再利用できる機能です。例えば、複数のViewで共通する指標があるケースなどでは、共通項目をまとめた一つのViewを再利用することで、管理やメンテナンスの面で役に立ちます。
覚えておくと便利な機能なので、今回はViewファイルをExtendsした時の挙動を中心に確認してみました。
ViewファイルのExtends
今回は、products
というViewファイルをExtendsしてみます。元のViewは以下の通り。
##元のView view: products { sql_table_name: schema.table_name ;; dimension: … { } measure: … { }
Extendsする方法は簡単で、include
パラメーターで拡張元のファイルを指定し、extends
パラメーターでView名を指定するだけです。
include: "/View/products.view.lkml" view: extends_products { extends: [products] }
そうすると、extends_productsにはほかに何も記載していないにも関わらず、productsの内容が反映されていることがわかります。
Extends先でフィールドの定義を変更したときの挙動
試しに元あるディメンションの定義を変更してみました。この場合、ディメンションの定義がExtends元と、Extends先で競合していることになります。
##Extends元 view: products { dimension: category { label: "カテゴリ" sql: TRIM(${TABLE}.category) ;; drill_fields: [item_name] } } ##Extends先 ##カテゴリ名の変更と、語尾に★を付けてみる view: extends_products { dimension: category { label: "カテゴリ名" sql: TRIM(${TABLE}.category || "★") ;; drill_fields: [item_name] } }
実際にExplore画面で確認してみると、Extends先で定義した内容がオーバーライドされる形で反映されていることがわかりました。このように、競合される場合は内容がExtends先で上書きされていることがわかります。
変更した定義がオーバーライドされないケースの注意点
多くの場合、同じパラメーターを使用して定義を変更するとオーバーライドされる形で反映されますが、一部のパラメーターではオーバーライドされず、条件が追加される形で反映されます。
公式Doc:Extends for View (考慮する事項)
今回は、フィルタードメジャーのフィルター条件の定義を変更してみます。Extends元では、Categoryでフィルターしていたのに対して、Extends先ではdepartmentでフィルターしています。
##Extends元 view: products { measure: brand_count_filterd { label: "ブランド数_filterd" type: count_distinct filters: [category: "Accessories"] sql: ${brand} ;; } } ##Extends先 view: extends_products { measure: brand_count_filterd { label: "ブランド数_filterd" type: count_distinct filters: [department: "Women"] sql: ${brand} ;; } }
Extends先で発行されたSQLを確認すると、Categoryのフィルターは消えず、departmentのフィルタがAND条件で追加されています。
このように、一部のパラメーターではオーバーライドではなく条件が追加される形でデータが抽出されるため、注意が必要です。
ExploreのExtends
ExploreをExtendsする場合も、Extendsパラメーターを記載するのみで完了します。
explore: products_moto { group_label: "(99)_Extendsテスト" label: "Extendsテスト" from: products view_label: "プロダクト_元" } explore: extends_products { extends: [products_moto] }
ExploreをExtendsする場合にも、特にjoinを使用している際などで特に注意が必要になります。詳しくは以下の記事でも紹介されているので、こちらも参考にしてみてください。
さいごに
いかがでしたでしょうか。Lookerを使い始めのころはあまり利用イメージが沸かないかもしれませんが、シンプルなLookMLの開発には重要な機能になりますので、是非試してみてください。